assume cs:code
code segment
    start:mov bx, 0b800h
          mov es, bx
          mov di, 160 * 2 + 30 * 2

          call short ymd    ;处理年月日
          mov byte ptr es:[di-2] , ' '  ;去掉最后一个'/'

          call short hms    ;处理小时分钟秒
          mov byte ptr es:[di - 2], ' ' ;去掉最后一个':'

          mov ax, 4c00h
          int 21h

    hms: push cx
         mov cx, 3
         mov al, 4
      s0: push ax
         out 70h, al
         in al, 71h     ;从71h端口取得当前时间
         call process   ;处理这个时间，返回值在(ax)中，下个程序雷同
         mov byte ptr es:[di], ah
         mov byte ptr es:[di + 2], al
         mov byte ptr es:[di + 4], ':'
         add di, 6
         pop ax
         sub ax, 2
         loop s0

         pop cx
         ret
         


    ymd: push cx 
         mov cx, 3
         mov al, 9
     s:  push ax
         out 70h, al
         in al, 71h
         call process
         mov byte ptr es:[di], ah
         mov byte ptr es:[di + 2], al
         mov byte ptr es:[di + 4], '/' 
         add di, 6

         pop ax
         dec ax
         loop s

         pop cx
         ret

;处理al中的时间值（BCD码表示的）
process:push cx 
        mov ah, al
        mov cl, 4
        shr ah, cl
        and al, 00001111B
        add ah, 30h ;转换为ASCII码
        add al, 30h

        pop cx
        ret

code ends 
end start
